//package com.fhz.a2102shopjava.widget;
//
//
//import android.animation.AnimatorSet;
//import android.animation.ObjectAnimator;
//import android.animation.TypeEvaluator;
//import android.animation.ValueAnimator;
//import android.content.Context;
//import android.graphics.PointF;
//import android.graphics.drawable.Drawable;
//import android.util.AttributeSet;
//import android.util.Log;
//import android.view.View;
//import android.view.animation.LinearInterpolator;
//import android.widget.ImageView;
//import android.widget.RelativeLayout;
//
//import androidx.core.content.ContextCompat;
//
//public class MyGiftView extends RelativeLayout {
//    private int screenWidth;
//    private int screenHeight;
//    private static final String TAG = "MyGiftView";
//    private LayoutParams layoutParams;
//    private Drawable[] drawables = new Drawable[5];
//
//    public MyGiftView(Context context) {
//        super(context);
//        init();
//    }
//
//    public MyGiftView(Context context, AttributeSet attrs) {
//        super(context, attrs);
//        init();
//    }
//
//    private void init() {
//
//        drawables[0] = ContextCompat.getDrawable(getContext(),R.mipmap.ic_launcher);
//        drawables[1] = ContextCompat.getDrawable(getContext(),R.mipmap.ic_launcher);
//        drawables[2] = ContextCompat.getDrawable(getContext(),R.mipmap.ic_launcher);
//        drawables[3] = ContextCompat.getDrawable(getContext(),R.mipmap.ic_launcher);
//        drawables[4] = ContextCompat.getDrawable(getContext(),R.mipmap.ic_launcher);
//
//        layoutParams = new LayoutParams(100,100);
//        //代码设置布局方式，底部居中
////        layoutParams.addRule(CENTER_HORIZONTAL,TRUE);
////        layoutParams.addRule(ALIGN_PARENT_BOTTOM,TRUE);
//
//    }
//
//    public void addImageView(){
//        ImageView imageView = new ImageView(getContext());
//        imageView.setImageDrawable(drawables[(int) (Math.random()*drawables.length)]);
//        imageView.setLayoutParams(layoutParams);
//
//        addView(imageView);
//        setAnim(imageView).start();
//        getBezierValueAnimator(imageView).start();
//    }
//
//    private ValueAnimator getBezierValueAnimator(View target) {
//
//        //初始化一个贝塞尔计算器- - 传入
//        BezierEvaluator evaluator = new BezierEvaluator(getPointF(),getPointF());
//
//        //这里最好画个图 理解一下 传入了起点 和 终点
//        PointF randomEndPoint = new PointF((float) (Math.random()*screenWidth), (float) (Math.random()*50));
//        ValueAnimator animator = ValueAnimator.ofObject(evaluator, new PointF(screenWidth / 2, screenHeight), randomEndPoint);
//        animator.addUpdateListener(new BezierListener(target));
//        animator.setTarget(target);
//        animator.setDuration(3000);
//        return animator;
//    }
//
//    /**
//     * 产生随机控制点
//     * @return
//     */
//    private PointF getPointF() {
//        PointF pointF = new PointF();
//        pointF.x = (float) (Math.random()*screenWidth);
//        Log.i(TAG, "getPointF: "+pointF.x);
//        pointF.y = (float) (Math.random()*screenHeight/4);
//        return pointF;
//    }
//
//    @Override
//    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//
//        screenWidth = getMeasuredWidth();
//        screenHeight = getMeasuredHeight();
//    }
//
//    private AnimatorSet setAnim(View view){
//        ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, View.SCALE_X, 0.2f, 1f);
//        ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, View.SCALE_Y, 0.2f, 1f);
//
//        AnimatorSet enter = new AnimatorSet();
//        enter.setDuration(500);
//        enter.setInterpolator(new LinearInterpolator());//线性变化
//        enter.playTogether(scaleX,scaleY);
//        enter.setTarget(view);
//
//        return enter;
//    }
//
//    private class BezierListener implements ValueAnimator.AnimatorUpdateListener {
//
//        private View target;
//
//        public BezierListener(View target) {
//            this.target = target;
//        }
//
//        @Override
//        public void onAnimationUpdate(ValueAnimator animation) {
//            //这里获取到贝塞尔曲线计算出来的的x y值 赋值给view 这样就能让爱心随着曲线走啦
//            PointF pointF = (PointF) animation.getAnimatedValue();
//            target.setX(pointF.x);
//            target.setY(pointF.y);
//            // 这里顺便做一个alpha动画
//            target.setAlpha(1 - animation.getAnimatedFraction());
//        }
//    }
//
//    public class BezierEvaluator implements TypeEvaluator<PointF> {
//
//
//        private PointF pointF1;
//        private PointF pointF2;
//        public BezierEvaluator(PointF pointF1,PointF pointF2){
//            this.pointF1 = pointF1;
//            this.pointF2 = pointF2;
//        }
//        @Override
//        public PointF evaluate(float time, PointF startValue, PointF endValue) {
//
//            float timeLeft = 1.0f - time;
//            PointF point = new PointF();//结果
//
//            point.x = timeLeft * timeLeft * timeLeft * (startValue.x)
//                    + 3 * timeLeft * timeLeft * time * (pointF1.x)
//                    + 3 * timeLeft * time * time * (pointF2.x)
//                    + time * time * time * (endValue.x);
//
//            point.y = timeLeft * timeLeft * timeLeft * (startValue.y)
//                    + 3 * timeLeft * timeLeft * time * (pointF1.y)
//                    + 3 * timeLeft * time * time * (pointF2.y)
//                    + time * time * time * (endValue.y);
//            return point;
//        }
//    }
//
//}